Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Mach-O</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Mach-O"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Mach-O rootpage-Mach-O skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Mach-O</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Mach-O</b>, für <i><span lang="en"><a href="Mach_(Kernel)" title="Mach (Kernel)">Mach</a> Object</span></i>, beschreibt das Standard-<a href="Bin%C3%A4rdatei" title="Binärdatei">Binärformat</a> <a href="Ausf%C3%BChrbare_Datei" title="Ausführbare Datei">ausführbarer Programme</a>, <a href="Programmbibliothek" title="Programmbibliothek">Bibliotheken</a> und von <a href="Dump" title="Dump">Speicherauszügen</a> unter vielen MACH-basierten <a href="Unix" title="Unix">UNIX</a>-<a href="Betriebssystem" title="Betriebssystem">Betriebssystemen</a> wie beispielsweise <a href="OPENSTEP" title="OPENSTEP">OPENSTEP</a> (ursprünglich NeXTStep), <a href="FreeBSD" title="FreeBSD">FreeBSD</a> oder <a href="MacOS" title="MacOS">macOS</a> (ursprünglich unter dem Namen Mac OS&nbsp;X).
</p><p>Es wurde ab 1985 an der <a href="Carnegie_Mellon_University" title="Carnegie Mellon University">Carnegie Mellon University</a>, kurz CMU, für das MACH-Betriebssystem entwickelt. Große Verbreitung hat es vor allem unter NeXTStep und dessen Weiterentwicklung macOS und darauf basierenden Apple-Systemen, wie <a href="IOS_(Betriebssystem)" title="IOS (Betriebssystem)">iOS</a> und <a href="IPadOS" title="IPadOS">iPadOS</a>. Mit <span lang="en"><a href="Universal_Binary" title="Universal Binary">Universal Binaries</a></span>, unter NeXTStep <i><span lang="en">Multi-Architecture Binaries</span></i>, wurde das Format zudem um Multi-Prozessorarchitektur-Fähigkeit erweitert.
</p>

<div class="mw-heading mw-heading2"><h2 id="Aufbau">Aufbau</h2></div>
<p>Eine Mach-O-Datei besteht im Wesentlichen aus drei Teilen:<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Kopfinformationen, <span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">header</span>
<ul><li><i><span lang="en"><a href="Magische_Zahl_(Informatik)" title="Magische Zahl (Informatik)">Magic</a></span></i></li>
<li>diverse <a href="Flag_(Informatik)" title="Flag (Informatik)">Flags</a></li>
<li>Anzahl und Größe der <i><span lang="en">Load commands</span></i></li></ul></li>
<li><span lang="en">Load commands</span>
<ul><li>Metadaten</li>
<li>Offset-Addressen der Segmente</li></ul></li>
<li>Segmente, <i><span lang="en">segments</span></i>
<ul><li>bis zu 255 Sektionen, <i><span lang="en">sections</span></i></li></ul></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Header">Header</h3></div>
<p>Der Mach-Header ist ein 32&nbsp;<a href="Byte" title="Byte">Bytes</a> großer Bereich am Anfang einer <a href="64-Bit-Architektur" title="64-Bit-Architektur">64-Bit</a>-Mach-O-Binärdatei bzw. 28&nbsp;Bytes bei <a href="32-Bit-Architektur" title="32-Bit-Architektur">32-Bit</a>-Mach-O. Der folgende <a href="Quelltext" title="Quelltext">Quelltext</a> stammt aus <code>osfmk/mach-o/loader.h</code> von <a href="XNU" title="XNU">XNU</a>, dem Kernel von macOS.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div style="margin-left:3em;" class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">mach_header_64</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">magic</span><span class="p">;</span><span class="w"> </span><span class="cm">/* mach magic number identifier */</span>
<span class="w"> </span><span class="n">cpu_type_t</span><span class="w"> </span><span class="n">cputype</span><span class="p">;</span><span class="w"> </span><span class="cm">/* cpu specifier */</span>
<span class="w"> </span><span class="n">cpu_subtype_t</span><span class="w"> </span><span class="n">cpusubtype</span><span class="p">;</span><span class="w"> </span><span class="cm">/* machine specifier */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">filetype</span><span class="p">;</span><span class="w"> </span><span class="cm">/* type of file */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">ncmds</span><span class="p">;</span><span class="w"> </span><span class="cm">/* number of load commands */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">sizeofcmds</span><span class="p">;</span><span class="w"> </span><span class="cm">/* the size of all the load commands */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">flags</span><span class="p">;</span><span class="w"> </span><span class="cm">/* flags */</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">reserved</span><span class="p">;</span><span class="w"> </span><span class="cm">/* reserved (64-Bit only) */</span>
<span class="p">};</span>
</pre></div>
<p>Ein Beispiel für einen Mach-Header aus einer beliebigen Programmdatei:<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">

<tbody><tr class="hintergrundfarbe6">
<th>Offset<br>(hex)
</th>
<th>Länge<br>(dec)
</th>
<th>Inhalt
</th>
<th>Beispiel
</th></tr>
<tr>
<td align="right"><samp>00</samp>
</td>
<td align="right">4
</td>
<td><i><span lang="en">mach magic number identifier</span></i>
</td>
<td><code>0xCFFAEDFE</code> → <samp>MH_CIGAM_64</samp>
</td></tr>
<tr>
<td align="right"><samp>04</samp>
</td>
<td align="right">4
</td>
<td><i><span lang="en">CPU type</span></i>
</td>
<td><code>0x01000007</code> → <samp>CPU_TYPE_X86_64 = CPU_TYPE_I386&nbsp;| CPU_ARCH_ABI64</samp>
</td></tr>
<tr>
<td align="right"><samp>08</samp>
</td>
<td align="right">4
</td>
<td><i><span lang="en">CPU subtype, machine specifier</span></i>
</td>
<td><code>0x80000003</code> → <samp>CPU_SUBTYPE_X86_ALL&nbsp;| CPU_SUBTYPE_LIB64</samp>
</td></tr>
<tr>
<td align="right"><samp>12</samp>
</td>
<td align="right">4
</td>
<td>Dateityp
</td>
<td><code>0x00000002</code> → <samp>MH_EXECUTE</samp>
</td></tr>
<tr>
<td align="right"><samp>16</samp>
</td>
<td align="right">4
</td>
<td>Anzahl der <i><span lang="en">load commands</span></i>
</td>
<td><code>0x00000010</code>
</td></tr>
<tr>
<td align="right"><samp>20</samp>
</td>
<td align="right">4
</td>
<td>Größe aller <i><span lang="en">load commands</span></i>
</td>
<td><code>0x00000510</code> <a href="Byte" title="Byte">bytes</a>
</td></tr>
<tr>
<td align="right"><samp>24</samp>
</td>
<td align="right">4
</td>
<td><i><span lang="en"><a href="Flag_(Informatik)" title="Flag (Informatik)">Flags</a></span></i>
</td>
<td><code>0x00200085</code> → u.&nbsp;a. <samp>MH_DYLDLINK&nbsp;| MH_NOUNDEFS</samp>
</td></tr>
<tr>
<td align="right"><samp>28</samp>
</td>
<td align="right">4
</td>
<td><i>reserviert</i> (fehlt bei 32-Bit-Mach-O)
</td>
<td><code>0x00000000</code>
</td></tr>
</tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Executable_and_Linking_Format" title="Executable and Linking Format">Executable and Linking Format</a> (ELF)</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite">Harry Moulton: <a rel="nofollow" class="external text" href="https://h3adsh0tzz.com/2020/01/macho-file-format/"><i>Mach-O File Format: Introduction.</i></a> 3.&nbsp;Januar 2020<span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 22.&nbsp;November 2021</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AMach-O&amp;rft.title=Mach-O+File+Format%3A+Introduction&amp;rft.description=Mach-O+File+Format%3A+Introduction&amp;rft.identifier=https%3A%2F%2Fh3adsh0tzz.com%2F2020%2F01%2Fmacho-file-format%2F&amp;rft.creator=Harry+Moulton&amp;rft.date=2020-01-03&amp;rft.language=en">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite">William Woodruff: <a rel="nofollow" class="external text" href="https://yossarian.net/res/pub/macho-internals/macho-internals.pdf"><i>Mach-O Internals.</i></a> (PDF; 307&nbsp;KB) 10.&nbsp;Februar 2016, <span style="white-space:nowrap;">S. 10</span><span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 14.&nbsp;Juli 2020</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AMach-O&amp;rft.title=Mach-O+Internals&amp;rft.description=Mach-O+Internals&amp;rft.identifier=https%3A%2F%2Fyossarian.net%2Fres%2Fpub%2Fmacho-internals%2Fmacho-internals.pdf&amp;rft.creator=William+Woodruff&amp;rft.date=2016-02-10&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite">Apple, Inc.: <a rel="nofollow" class="external text" href="https://opensource.apple.com/source/xnu/xnu-792/EXTERNAL_HEADERS/mach-o/loader.h"><i>XNU Kernel Source.</i></a><span class="Abrufdatum"> Abgerufen am 22.&nbsp;November 2021</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AMach-O&amp;rft.title=XNU+Kernel+Source&amp;rft.description=XNU+Kernel+Source&amp;rft.identifier=https%3A%2F%2Fopensource.apple.com%2Fsource%2Fxnu%2Fxnu-792%2FEXTERNAL_HEADERS%2Fmach-o%2Floader.h&amp;rft.creator=Apple%2C+Inc.&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://stackoverflow.com/questions/27669766/how-to-read-mach-o-header-from-object-file">https://stackoverflow.com/questions/27669766/how-to-read-mach-o-header-from-object-file</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2021-11-22" href="https://de.wikipedia.org/wiki/?title=Mach-O&amp;oldid=217495809">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>